import java.util.Random;
import java.util.Scanner;

public class Test_2024_9_14 {
    static Scanner sc = new Scanner(System.in);



        public static void main(String[] args) {
            int number = 23; // 示例数字，二进制为 10111
            System.out.println("原始数字的二进制表示（从右到左）: " + Integer.toBinaryString(number));

            // 提取偶数位（从右到左）
            int evenBits = extractEvenBits(number);
            System.out.println("偶数位组成的二进制序列: " + Integer.toBinaryString(evenBits));

            // 提取奇数位（从右到左）
            int oddBits = extractOddBits(number);
            System.out.println("奇数位组成的二进制序列: " + Integer.toBinaryString(oddBits));
        }

        // 提取偶数位（从右到左）
        public static int extractEvenBits(int number) {
            int result = 0;
            int index = 0; // 用来表示当前位的权重（从右到左，从0开始）
            while (number > 0) {
                if (index % 2 == 0) { // 如果是偶数位
                    // 检查当前最低位是否为1，如果是，则将其加到结果中对应的位置
                    if ((number & 1) == 1) {
                        result |= (1 << (index / 2)); // 将1左移index/2位
                    }
                }
                number >>= 1; // 右移一位，处理下一位
                index++;
            }
            return result;
        }

        // 提取奇数位（从右到左）
        public static int extractOddBits(int number) {
            int result = 0;
            int index = 0; // 用来表示当前位的权重（从右到左，从0开始）
            while (number > 0) {
                if (index % 2 != 0) { // 如果是奇数位
                    // 检查当前最低位是否为1，如果是，则将其加到结果中对应的位置
                    if ((number & 1) == 1) {
                        result |= (1 << ((index - 1) / 2)); // 将1左移(index-1)/2位
                    }
                }
                number >>= 1; // 右移一位，处理下一位
                index++;
            }
            return result;
        }
    
    public static void main10(String[] args) {
        //求出0～999之间的所有“水仙花数”并输出。
        // (“水仙花数”是指一个三位数，其各位数字的立方和确好等于该数本身

        for(int i =0;i<=999;i++){
            if(isNarcissistic(i)){
                System.out.println("i");
            }
        }

    }
    public static  boolean isNarcissistic(int number){
        int originalNumber =number;
        int sum =0;
        while (number >0){
            int digit = number%10;
            sum += Math.pow(digit,3);
            number /=10;
        }
        return sum == originalNumber;
    }
    public static void main9(String[] args) {
        //求两个正整数的最大公约数
        int a =sc.nextInt();
        int b = sc.nextInt();
        int gcd = gcd(a,b);
        System.out.println(gcd);
    }
    public static int gcd(int a ,int b) {
        int min = a < b ? a : b;
        for (int i = min; i >=1 ; i--) {//从最小的一直减，直接到符合条件的那么就是最大公约数，都没有返回0
            if(a%i==0 && b%i==0){
                return i;
            }
        }
        return 0;
    }
    public static int gcd2(int a,int b){
        int c = a %b;//辗转相除法，取余数，给C,如果取到0的时候，那么 b就是 最大公约数。如此循环
        while(c != 0){
            a =b;
            b =c;
            c = a%b;
        }
        return b;
    }
    public static  int gcd4(int a,int b){
        if (a<b){
            int tmp = a;
            a = b;
            b = a;
        }
        return (a%b ==0)? b:gcd4(a-b,b);
    }
    public static  int gcd5(int a,int b){

        return (a%b ==0)? b:a>b?gcd5(a-b,b):gcd5(b-a,a);
    }
    public static int gcd6(int a, int b) {
        if (b == 0) {
            return a;
        } else {
            return gcd(b, a % b);
        }
    }
    public static int gcd3(int a,int b){
        return (a%b ==0) ? b: gcd2(b, a%b);//如果a%b=0就返回，不是，前面变b，后面便 a%b,直到 ==0；
    }










    public static void main8(String[] args) {
        //. 输出乘法口诀表
        for (int i = 1; i < 10; i++) {
            for (int j = 1;j<=i;j++) {
                System.out.print(j + "*" + i + "=" + (j * i) + "\t");
            }
            System.out.println();
        }



    }
    public static void main7(String[] args) {
        //输出 1000 - 2000 之间所有的闰年
        //被4整除，但不能被100整除
        //或者被400整除
        for (int i = 1000; i <= 2000 ; i++) {
            if((i%4==0 && i%100!=0) || i%400==0){
                System.out.println(i+" ");
            }
        }
    }
    public static void main6(String[] args) {
        //打印 1 - 100 之间所有的素数
        for(int i =2;i<=100;i++) {

            for (int  j= 2; j < Math.sqrt(i); j++) {
                if (i % j == 0) {
                    System.out.print(i + " ");
                    continue;
                }
            }
        }
    }
    public static void main5(String[] args) {
        // 判定一个数字是否是素数
        System.out.println("请输入数字：");
      Boolean flag = false;
        int num = sc.nextInt();
        for (int i = 2; i < Math.sqrt(num); i++) {
            if(num%i == 0) {
                flag = true;
                break;
            }
        }
        if(flag){
            System.out.println(num+"是素数");
        }else{
            System.out.println(num+"不是素数");
        }
    }
    public static void main4(String[] args) {
        //根据年龄, 来打印出当前年龄的人是
        // 少年(低于18), 青年(19-28), 中年(29-55), 老年(56以上)
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入年龄：");
        int age = sc.nextInt();
        if (age < 18){
            System.out.println("少年");
        }else if (age>=18 && age<=28){
            System.out.println("青年");
        }else{
            System.out.println("老年");
        }
    }
    public static void main3(String[] args) {
        Random randon = new Random();//默认随机种子是系统时间
        Scanner sc = new Scanner(System.in);
        int toGues = randon.nextInt(101);//包含零但不包含101
        while(true){
            System.out.println("请输入要输入的数字：（0——100）");
            int num = sc.nextInt();
            if(num < toGues){
                System.out.println("低了");
                continue;
            }else if(num > toGues){
                System.out.println("高了");
                continue;
            }else {
                System.out.println("猜对了");
                break;
            }
        }
    }
    public static void main2(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入名字");
        String name = sc.nextLine();
        System.out.println("输入年龄");
        int age = sc.nextInt();
        System.out.println("输入工资");
        float salary = sc.nextFloat();
        System.out.println("姓名："+name+"\n年龄："+age+"\n工资:"+salary );
    }
    public static void main1(String[] args) {
        //判断奇偶
        int num =10;
        if(num%2 == 0){
            System.out.println("偶数");
        }else{
            System.out.println("奇数");
        }
    }
}
